package com.hsteach.dao.mapper.visit;

import java.util.Date;
import java.util.List;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hsteach.dao.domain.visit.VisitRecord;
import org.apache.ibatis.annotations.Param;

/**
 * 家访记录Mapper接口
 * 
 * @author fanxquer
 * @date 2023-07-21
 */
public interface VisitRecordMapper extends BaseMapper<VisitRecord>
{
    /**
     * 查询家访记录
     * 
     * @param id 家访记录主键
     * @return 家访记录
     */
    public VisitRecord selectVisitRecordById(Long id);
    public List<VisitRecord> selectVisitRecordByIds(List<Long> ids);


    public List<VisitRecord> selectVisitRecordByPersonIds(@Param("personIds") List<String> personIds);

    public List<VisitRecord> selectVisitRecordByReservationIds(@Param("reservationIds") List<Long> reservationIds);

    public List<VisitRecord> selectCountGroupByPersonIds(@Param("personIds") List<String> personIds);

    public List<VisitRecord> selectLatestDraftByPersonIds(@Param("personIds") List<String> personIds);

    public List<VisitRecord> selectCountGroupByClassIds(@Param("classIds") List<String> classIds, @Param("beginDate") Date beginDate, @Param("endDate") Date endDate);

    public List<VisitRecord> selectInterestCountGroupByClassIds(@Param("classIds") List<String> classIds, @Param("beginDate") Date beginDate, @Param("endDate") Date endDate);

    public List<VisitRecord> selectAllInterestSumGroupByClassIds(@Param("classIds") List<String> classIds);

    /**
     * 查询家访记录列表
     * 
     * @param visitRecord 家访记录
     * @return 家访记录集合
     */
    public List<VisitRecord> selectVisitRecordList(VisitRecord visitRecord);

    public List<VisitRecord> selectVisitRecordListV2(VisitRecord visitRecord);

    public List<Long> selectInterestIds(@Param("orgCode") String orgCode, @Param("classIds") List<String> classIds,@Param("personId") String personId);

    public List<Long> selectHasPeersIds(@Param("orgCode") String orgCode, @Param("classIds") List<String> classIds,@Param("personId") String personId);

    /**
     * 新增家访记录
     * 
     * @param visitRecord 家访记录
     * @return 结果
     */
    public int insertVisitRecord(VisitRecord visitRecord);

    /**
     * 修改家访记录
     * 
     * @param visitRecord 家访记录
     * @return 结果
     */
    public int updateVisitRecord(VisitRecord visitRecord);

    /**
     * 删除家访记录
     * 
     * @param id 家访记录主键
     * @return 结果
     */
    public int deleteVisitRecordById(Long id);

    /**
     * 批量删除家访记录
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteVisitRecordByIds(Long[] ids);

    public Long selectCount(VisitRecord visitRecord);

    /**
     * 根据reservationid查询
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    List<VisitRecord> selectByReservationIds(List<Long> ids);

}
